package com.mlh.string;

/**
 * @author 缪林辉
 * @date 2024/2/28 11:41
 * @DESCRIPTION
 * 编写一个函数，其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
 * 不要给另外的数组分配额外的空间，你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
 * 示例 1：
 * 输入：s = ["h","e","l","l","o"]
 * 输出：["o","l","l","e","h"]
 */
public class ReverseString {
    public void method1(char[] s) {
        if(s.length<=1){
            return;
        }
        int l=0,r=s.length-1;
        while (l<r){
            char temp=s[l];
            s[l]=s[r];
            s[r]=temp;
            r--;
            l++;
        }
    }

    public void method2(char[] s) {
        if(s.length<=1){
            return;
        }
        int l=0,r=s.length-1;
        while (l<r){
            //使用异或来进行值交换
            //相同为0，不同为1 异或的特性也叫：不进位相加。
            s[l] ^= s[r];  //构造 a ^ b 的结果，并放在 a 中
            s[r] ^= s[l];  //将 a ^ b 这一结果再 ^ b ，存入b中，此时 b = a, a = a ^ b
            s[l] ^= s[r];  //a ^ b 的结果再 ^ a ，存入 a 中，此时 b = a, a = b 完成交换
            l++;
            r--;
        }
    }
}
